package day21.colllection;

import java.util.*;

/**
 * 学生管理类，用于演示集合的增删改查操作
 */
public class StudentManager {
    // 使用List集合存储学生信息
    private List<Student> students;

    /**
     * 构造方法，初始化学生集合
     */
    public StudentManager() {
        students = new ArrayList<>();
    }

    /**
     * 添加学生
     * @param student 要添加的学生对象
     * @return 添加成功返回true，否则返回false
     */
    public boolean addStudent(Student student) {
        // 检查学号是否已存在
        if (findStudentById(student.getId()) != null) {
            System.out.println("学号为" + student.getId() + "的学生已存在，添加失败！");
            return false;
        }
        students.add(student);
        System.out.println("学生" + student.getName() + "添加成功！");
        return true;
    }

    /**
     * 根据学号删除学生
     * @param id 要删除的学生学号
     * @return 删除成功返回true，否则返回false
     */
    public boolean deleteStudent(int id) {
        Student student = findStudentById(id);
        if (student != null) {
            students.remove(student);
            System.out.println("学号为" + id + "的学生删除成功！");
            return true;
        } else {
            System.out.println("未找到学号为" + id + "的学生，删除失败！");
            return false;
        }
    }

    /**
     * 修改学生信息
     * @param id 要修改的学生学号
     * @param newName 新姓名
     * @param newAge 新年龄
     * @param newMajor 新专业
     * @return 修改成功返回true，否则返回false
     */
    public boolean updateStudent(int id, String newName, int newAge, String newMajor) {
        Student student = findStudentById(id);
        if (student != null) {
            student.setName(newName);
            student.setAge(newAge);
            student.setMajor(newMajor);
            System.out.println("学号为" + id + "的学生信息修改成功！");
            return true;
        } else {
            System.out.println("未找到学号为" + id + "的学生，修改失败！");
            return false;
        }
    }

    /**
     * 根据学号查找学生
     * @param id 要查找的学生学号
     * @return 找到返回学生对象，否则返回null
     */
    public Student findStudentById(int id) {
        for (Student student : students) {
            if (student.getId() == id) {
                return student;
            }
        }
        return null;
    }

    /**
     * 根据姓名查找学生（可能有重名）
     * @param name 要查找的学生姓名
     * @return 找到返回学生列表，否则返回空列表
     */
    public List<Student> findStudentsByName(String name) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getName().equals(name)) {
                result.add(student);
            }
        }
        return result;
    }

    /**
     * 显示所有学生信息
     */
    public void displayAllStudents() {
        if (students.isEmpty()) {
            System.out.println("暂无学生信息！");
        } else {
            System.out.println("所有学生信息：");
            for (Student student : students) {
                System.out.println(student);
            }
        }
    }

    /**
     * 获取学生总数
     * @return 学生总数
     */
    public int getStudentCount() {
        return students.size();
    }
}